package dominio.individuos

import dominio.datos.Informacion
import dominio.ubicaciones.Banco
import dominio.ubicaciones.Biblioteca
import dominio.ubicaciones.Club
import dominio.ubicaciones.Embajada
import dominio.ubicaciones.Lugar
import java.util.List
import utilidades.Utils
import dominio.datos.Rasgo
import dominio.datos.Caracteristica
import dominio.datos.Hobbie
import java.util.ArrayList
import org.uqbar.commons.utils.Observable

@Observable
class Informante extends Ocupante {

	@Property List<Informacion> pistas = new ArrayList<Informacion>
	extension Utils utils = new Utils

	new() {}

	new(Lugar lugar) {
		setearPistas(lugar)
	}

	def dispatch void setearPistas(Embajada it) {
		pistas.flatten(pistasCaracteristicasDestino(2))
	}

	def dispatch void setearPistas(Banco it) {
		pistas.flatten(pistasCaracteristicasDestino(1))
									.flatten(pistasRasgos(1))
	}

	def dispatch void setearPistas(Biblioteca it) {
		pistas.flatten(pistasCaracteristicasDestino(1))
									.flatten(pistasRasgos(1))
									.flattenIf(pistasHobbies(1), probability(50))
	}

	def dispatch void setearPistas(Club it) {
		pistas.flatten(pistasRasgos(2))
									.flattenIf(pistasHobbies(1),probability(70))
	}

	def List<Rasgo> pistasRasgos(Lugar lugar, Integer cantidad) {
		takeRandom(lugar.getResponsable.rasgos, cantidad)
	}

	def List<Caracteristica> pistasCaracteristicasDestino(Lugar lugar, Integer cantidad) {
		takeRandom(lugar.getSiguientePais.caracteristicas, cantidad)
	}

	def List<Hobbie> pistasHobbies(Lugar lugar, Integer cantidad) {
		takeRandom(lugar.getResponsable.hobbies, cantidad)
	}
	
	override esInformante() { true }
	
	def String infoCompleta()'''
	«FOR info : pistas»
	«info.nombreTipoInfo» - «info.dato»
	«ENDFOR»'''

}
